package main

import "fmt"

func main() {
	fmt.Println("map引入=================================================================================")
	fmt.Println()
	//map语法 var map变量名 map[keytype]valuetype
	//  //定义map变量：
	var a map[int]string
	//只声明map内存是没有分配空间
	//必须通过make函数进行初始化，才会分配空间：
	a = make(map[int]string, 10) //map可以存放10个键值对
	//将键值对存入map中：
	a[1] = "张三"
	a[2] = "李四"
	fmt.Println(a)

	fmt.Println("map创建方式=================================================================================")
	fmt.Println()

	//方式1：
	//定义map变量：
	var a1 map[int]string
	a1 = make(map[int]string, 10)
	a1[123456] = "张三"
	a1[456789] = "李四"
	fmt.Println("第一种方式创建map:", a1)

	//方式2：
	a3 := make(map[int]string)
	a3[20095452] = "张三"
	a3[20095387] = "李四"
	fmt.Println("第二种方式创建map:", a3)

	//方式3：
	a5 := map[int]string{
		20095452: "张三",
		20098765: "李四",
	}
	a5[12345678] = "晨"
	fmt.Println("第三种方式创建map:", a5)

	fmt.Println("map操作===============================================================")
	fmt.Println()

	var b map[int]string
	b = make(map[int]string, 10)
	//增加：
	b[20095452] = "张三"
	b[20095387] = "李四"
	//修改：
	b[20095452] = "王五"
	fmt.Println(b)
	//删除：
	delete(b, 20095387)
	delete(b, 20089546)
	fmt.Println(b)
	//查找：
	value, flag := b[20095452]
	fmt.Println(value)
	fmt.Println(flag)

	fmt.Println("map长度：", len(b))
	// 遍历
	for key, value := range b {
		fmt.Printf("key为：%v value为：%v \t", key, value)
	}

	fmt.Println("---------------------------")
	//加深难度：
	a6 := make(map[string]map[int]string)
	//赋值
	a6["班级1"] = make(map[int]string, 3)
	a6["班级1"][20096677] = "露露"
	a6["班级1"][20098833] = "丽丽"
	a6["班级1"][20097722] = "菲菲"
	a6["班级2"] = make(map[int]string, 3)
	a6["班级2"][20089911] = "小明"
	a6["班级2"][20085533] = "小龙"
	a6["班级2"][20087244] = "小飞"

	for key, value := range a6 {
		fmt.Println(key)
		for key1, value1 := range value {
			fmt.Printf("学生学号为：%v 学生姓名为%v \t", key1, value1)
		}
		fmt.Println()
	}

}
